#ifndef REDIS_H
#define REDIS_H
#include <hiredis/hiredis.h>
#include <thread>
#include <functional>
#include <iostream>
using namespace std;

class Redis
{
public:
    Redis();
    ~Redis();
    // 连接redis
    bool connect();
    // 向redis指定的通道channel发布消息
    bool publish(int channel, string message);
    // 向redis指定的通道订阅消息
    bool subscribe(int channel);
    // 取消对指定channel的订阅
    bool unsubscribe(int channel);
    //接收订阅通道中的消息
    void observer_channel_message();
    //设定订阅的channel收到消息时向业务层触发的回调函数
    void init_notify_handler(function<void(int,string)> fun);

private:
    //hiredis同步上下文对象，负责publish消息
    redisContext* _publish_context;
    //负责subscribe channel
    redisContext* _subscribe_context;
    //回调操作，向service层传递
    function<void(int,string)> _notify_message_handler;

};
#endif